#include <cstdio>
#include <cstring>
/**
    in数组代表是否被覆盖标记， -1代表未被覆盖，1表示被覆盖, 0表示没有这个数
**/
int in[10005] = {0};

int f(int x){
    return (x & 1)?((3 * x + 1) >> 1):(x >> 1);
}

void dg(int x){
    if(in[x] == 1) return;
    in[x] = 1;
    dg(f(x));
}

int main()
{
    int N = 0, num = 0;
    scanf("%d", &N);
    in[1] = 1;
    for(int i = 0; i < N; i++){
        scanf("%d", &num);
        if(in[num] == 0) { in[num] = -1; }
        dg(f(num));
    }
    //从大到小输出
    int begin = 0;
    for(int i = 105; i > 0; i--){
        if(in[i] == -1){
            printf("%s%d", !begin++?"":" ", i);
        }
    }
    printf("\n");
    return 0;
}
